package org.aurora.framework.boot.common.enums;

import java.util.Optional;

/**
 * name: Enumerator
 * <p>
 * desc: Enumerator 枚举器基类
 * <p>
 * create date: 2024-09-25 13:27:25
 *
 * @author cao.yong
 */
public interface Enumerator {

    /**
     * 获取枚举值
     * @return 枚举值
     */
    int getValue();

    /**
     * 枚举值转换为枚举项
     * @param value 枚举值
     * @param cls 枚举类
     * @return 枚举项
     * @param <E> 枚举类类型
     */
    static <E extends Enumerator> Optional<E> fromValue(Class<E> cls, int value) {
        for (E e : cls.getEnumConstants()) {
            if (e.getValue() == value) {
                return Optional.of(e);
            }
        }
        return Optional.empty();
    }

    /**
     * 枚举值转换为枚举项
     * @param value 枚举值
     * @param cls 枚举类
     * @param defaultValue 默认枚举
     * @return 枚举项
     * @param <E> 枚举类类型
     */
    static <E extends Enumerator> E fromValue(Class<E> cls, int value, E defaultValue) {
        for (E e : cls.getEnumConstants()) {
            if (e.getValue() == value) {
                return e;
            }
        }
        return defaultValue;
    }
}
